class Scheduler {
    constructor(limit){
        // 限制并个数的最大值
        this.limit = limit
        // 当前并发的个数
        this.number = 0,
        // 未完成的任务
        this.queue = []
    }
    addTask(timeout,str){
        this.queue.push([timeout,str])
    }
    start(){
        // 判断是否当前任务是否超过最大值，且队列是否为空
        if(this.number<this.limit&&this.queue.length){
            // 取出timeout和要执行的str
            var [timeout,str] = this.queue.shift()
            // 当前number++
            this.number++
            setTimeout(() => {
                console.log(str);
                // 执行完number--
                this.number--
                this.start()
            },timeout*1000)
            this.start()
        }
    }
}

//支持并发的调度器， 最多允许2两任务进行处理
const scheduler = new Scheduler(2)
scheduler.addTask(1, '1');   // 1s后输出’1'
scheduler.addTask(2, '2');  // 2s后输出’2'
scheduler.addTask(1, '3');  // 2s后输出’3'
scheduler.addTask(1, '4');  // 3s后输出’4'
scheduler.start();
